package br.com.processo.util.conversor;

import javax.el.ValueExpression;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import br.com.processo.bean.UsuarioBean;
import br.com.processo.modelo.Estado;

@FacesConverter(value = "estadoConverter")
public class EstadoConverter extends ConverterGenerico implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		super.verificaEntradaAsObject(context, component, value);
		try {

			FacesContext ctx = FacesContext.getCurrentInstance();
			ValueExpression vex = ctx
					.getApplication()
					.getExpressionFactory()
					.createValueExpression(ctx.getELContext(),
							"#{usuarioBean}", UsuarioBean.class);

			UsuarioBean bean = (UsuarioBean) vex.getValue(ctx.getELContext());

			Estado estado = bean.getEstadoPorNome(value);
			if (estado == null) {
				throw new ConverterException(new FacesMessage(
						FacesMessage.SEVERITY_ERROR, "Erro inesperado",
						"Estado não encontrado!"));
			}
			return estado;

		} catch (Exception exception) {
			throw new ConverterException(new FacesMessage(
					FacesMessage.SEVERITY_ERROR, "Conversion Error",
					"Estado não encontrado!"));
		}
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component,
			Object value) {

		super.verificaEntradaAsString(context, component, value);
		return ((Estado) value).getNome();
	}
}
